/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package AlgebraLinear;

/**
 *
 * @author Andre
 */
public class MatrizHandler {

    private double[][] matrizA, matrizB;

    private double[][] montaMatriz(String[] arg0){

        double[][] matrizMontada = new double[arg0.length][arg0[0].split("\t").length];

        for (int i = 0; i < matrizMontada.length; i++) {
            arg0[i] = arg0[i].replaceAll("[,]", ".");
            String[] temporaria = arg0[i].split("\t");
            for (int j = 0; j < matrizMontada[i].length; j++) {
                matrizMontada[i][j] = Double.parseDouble(temporaria[j]);
            }
        }

        return matrizMontada;
    }

    private void dumpMatrizes(){
        this.matrizA = null;
        this.matrizB = null;
    }

    public String calculaSoma(String[] arg0, String[] arg1){

        this.matrizA = montaMatriz(arg0);
        this.matrizB = montaMatriz(arg1);

        double[][] matrizResultado = new AlgebraLinear.Matriz.OperacoesMatriz().somaMatriz(matrizA, matrizB);

        this.dumpMatrizes();
        return AlgebraLinear.Matriz.FuncoesMatriz.imprimirMatriz(matrizResultado);
    }

    public String calculaSubtracao(String[] arg0, String[] arg1){
        this.matrizA = montaMatriz(arg0);
        this.matrizB = montaMatriz(arg1);

        this.matrizB = new AlgebraLinear.Matriz.OperacoesMatriz().multiplicacaoEscalar(-1, this.matrizB);

        double[][] matrizResultado = new AlgebraLinear.Matriz.OperacoesMatriz().somaMatriz(matrizA, matrizB);

        this.dumpMatrizes();
        return AlgebraLinear.Matriz.FuncoesMatriz.imprimirMatriz(matrizResultado);

    }

    public String calculaMultiplicacaoEscalar(double escalar, String[] arg0){
        this.matrizA = montaMatriz(arg0);

        double[][] matrizResultado = new AlgebraLinear.Matriz.OperacoesMatriz().multiplicacaoEscalar(escalar, this.matrizA);

        this.dumpMatrizes();
        return AlgebraLinear.Matriz.FuncoesMatriz.imprimirMatriz(matrizResultado);

    }


    public String calculaMultiplicacao(String[] arg0, String[] arg1){
        this.matrizA = montaMatriz(arg0);
        this.matrizB = montaMatriz(arg1);

        double[][] matrizResultado = new AlgebraLinear.Matriz.OperacoesMatriz().multiplicacaoMatrizes(this.matrizA, this.matrizB);

        this.dumpMatrizes();
        return AlgebraLinear.Matriz.FuncoesMatriz.imprimirMatriz(matrizResultado);

    }


    public String calculaInversa(String[] arg0){
        this.matrizA = montaMatriz(arg0);

        double[][] matrizResultado = new AlgebraLinear.Matriz.MatrizInversa().calculaInversa(matrizA);

        this.dumpMatrizes();
        return AlgebraLinear.Matriz.FuncoesMatriz.imprimirMatriz(matrizResultado);

    }


    public String calculaDeterminante(String[] arg0){
        this.matrizA = montaMatriz(arg0);

        String resultado = AlgebraLinear.Matriz.FuncoesMatriz.Determinante(matrizA);

        this.dumpMatrizes();
        return resultado;

    }
}

